/*
 * I.cpp
 *
 *  Created on: 2013-4-9
 *      Author: zy
 */

#include<algorithm>
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
int c[310];
long long dp[310][310];
const long long INF=1e18;
int n,P;
int sig(double d)
{
	return fabs(d) < 1E-6 ? 0 : d < 0 ? -1 : 1;
}
struct Point
{
	double x, y;
	double k;
	Point(){}
	Point(double x, double y): x(x), y(y) {}
	void set(double x, double y) {
		this->x = x;
		this->y = y;
	}
	double mod(){//模
		return sqrt(x*x+y*y);
	}
	double mod_pow(){//模的平方
		return x*x + y*y;
	}
	void output() {
		printf("x = %f, y = %f\n", x, y);
	}
	bool operator < (const Point &p) const {
		return sig(x-p.x) != 0 ? x < p.x : sig(y-p.y) < 0;
	}
};
Point p[310];
double cross(Point o, Point a, Point b) {
	return (a.x - o.x)*(b.y - o.y)-(b.x - o.x)*(a.y - o.y);
}
double dot(Point &o, Point &a, Point &b) {
	return (a.x-o.x)*(b.x-o.x) + (a.y-o.y)*(b.y-o.y);
}
int btw(Point &x, Point &a, Point &b) {
	return sig(dot(x, a, b));
}
int g_cmp(const void *a, const void *b) {
	int d = sig(((Point*)a)->y-((Point*)b)->y);
	return d ? d : sig(((Point*)a)->x-((Point*)b)->x);
}
//按x从小到大排序，向右走为合法
int graham(Point*p, int n, int*ch)
{
	#define push(x)     ch[len ++]=x
	#define pop()		len --
	sort(p, p+n);
	int len = 0, len0 = 1, i;
	for(i = 0; i < n; i ++)
	{
		while(len > len0 && sig(cross(p[ch[len-1]], p[ch[len-2]], p[i]))<=0)
			pop();
		push(i);
	}
	len0 = len;
	for(i = n-2; i >= 0; i --) {
		while(len > len0 && sig(cross(p[ch[len-1]], p[ch[len-2]], p[i]))<=0)
			pop();
		push(i);
	}
	return len-1;
}
void init()
{
	for(int i=1;i<=300;i++)
		dp[i][i+1]=dp[i][i+2]=0;
}
long long cost(int i,int j)
{
	if(i+1==j)return 0;
	long long t1=(long long)(p[c[i]].x+p[c[j]].x);
	long long t2=(long long)(p[c[i]].y+p[c[j]].y);
	return abs(t1)*abs(t2)%P;
}
int main()
{

	init();
	while(scanf("%d%d",&n,&P)!=EOF)
	{
		for(int i=0;i<n;i++)
			scanf("%lf%lf",&p[i].x,&p[i].y);
		int len=graham(p,n,c);
		if(n!=len){puts("I can't cut.");continue;}
		n=len;
		for(int i=n-4;i>=0;i--)
			for(int j=i+3;j<=n-1;j++)
			{
				dp[i][j]=INF;
				for(int k=i+1;k<=j-1;k++)
					dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+cost(i,k)+cost(k,j));
			}
		cout<<dp[0][n-1]<<endl;
	}
	return 0;
}
